package com.atguigu.e_method;



/*
    注意 : 方法访问没有就近原则

    1. 在子类中访问父类的成员方法 :
        不同名 : 直接访问
        同名 : super.方法名(实参);

    2. 在父类中访问子类的成员方法 :
        不能直接访问 , 但是可以在父类中创建子类对象,使用子类对象调用子类自己的方法

    3. 在第三方类中创建子类对象访问父类成员方法 :
        不同名方法 : 子类对象调用即可
        同名方法 : 子类对象只会调用自己类中的方法不会启动父类中的同名方法

    4. 在第三方类中创建父类对象访问子类成员方法 : 不可以
 */
public class Demo {
    public static void main(String[] args) {
        //创建子类对象
        Son son = new Son();
        son.methodZi();
        son.methodFu();
        son.method();//子类的method方法
        System.out.println("-------------------");
        //创建父类对象
        Father father = new Father();
        father.method();
        father.methodFu();
        System.out.println("-------------------");

        //多态
        Father f = new Son();
        f.methodFu();//methodFu
        f.method();//子类的method方法
        //f.methodZi();//多态的弊端 : 父引用不能访问子类的特有成员

    }
}

class Father{
    public void method(){
        System.out.println("父类的method方法");
    }

    public void methodFu(){
        System.out.println("methodFu");
    }
}

class Son extends Father{
    public void method(){

        System.out.println("子类的method方法");
    }

    public void methodZi(){
        System.out.println("methodZi");
    }

    public void show(){
        //子类中访问子类自己的方法
        method();
        methodZi();
        //在子类中访问父类的方法
        methodFu();
        this.method(); //访问子类自己的方法
        super.method();//访问父类的方法
    }
}
